﻿using System;
using System.Data;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
using BLL;
using DevComponents.DotNetBar;

namespace GUI
{
    public partial class frmQuanLy : Office2007Form
    {
        private DataTable _dt = new DataTable();
        private DataSet _ds = new DataSet();
        private DataSet _dsVaitro = new DataSet();
        private BoThanhVien _mem;
        private BoVaiTro _vaitro;
        private BOLog _log;

        public frmQuanLy()
        {
            InitializeComponent();
            descSizeHeight();
        }
        #region "Tăng giảm kích thước form"
        public void incSizeHeight()
        {
            int y = Size.Height;
            for (int i = 0; i < 20; i++)
            {
                try
                {
                    Thread.Sleep(5);
                    Size = new Size(this.Size.Width, y + i * 6);
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.ToString());
                }
            }
            CenterToScreen();
        }

        public void descSizeHeight()
        {
            int y = this.Size.Height;
            for (int i = 0; i < 20; i++)
            {
                try
                {
                    Thread.Sleep(5);
                    Size = new Size(this.Size.Width, y - i * 6);
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.ToString());
                }
            }
            CenterToScreen();
        }
        #endregion

        #region "Load form"
        private void frmQuanLy_Load(object sender, EventArgs e)
        {
            _mem = new BoThanhVien();
            _vaitro = new BoVaiTro();
            _ds = _mem.Binding();
            _dt = _ds.Tables[0];
            dgvQuanLy.DataSource = _dt;
            dgvQuanLy.Columns[0].HeaderText = @"Tên Thành Viên";
            dgvQuanLy.Columns[1].HeaderText = @"Mật Khẩu";
            dgvQuanLy.Columns[2].HeaderText = @"Vai Trò";
            dgvQuanLy.Columns[0].Width = 150;
            dgvQuanLy.Columns[1].Width = 100;
            dgvQuanLy.Columns[2].Width = 105;

            _dsVaitro = _vaitro.Binding();
            cbxVaiTro.DataSource = _dsVaitro.Tables[0];
            cbxVaiTro.DisplayMember = "TenVaiTro";
            cbxVaiTro.ValueMember = "TenVaiTro";
        }
        #endregion

        #region "Hiển thị mật khẩu dưới dạng dấu *"
        private void dgvQuanLy_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if(e.ColumnIndex == 1 && e.Value != null)
            {
                e.Value = new String('*', e.Value.ToString().Length);
            }
        }
        #endregion

        #region "Thoát"
        private void btnThoat_Click(object sender, EventArgs e)
        {
            Dispose();
        }
        #endregion

        #region "Chức năng nút sửa"
        private void btnSua_Click(object sender, EventArgs e)
        {
            incSizeHeight();
            dgvQuanLy.Enabled = false;
            btnSua.Enabled = false;
            string memName = dgvQuanLy.CurrentRow.Cells[0].Value.ToString();
            string role = dgvQuanLy.CurrentRow.Cells[2].Value.ToString();

            txtTenThanhVien.Text = memName;
            cbxVaiTro.SelectedValue = role;
        }
        #endregion

        #region "Chức năng nút hủy"
        private void btnCancel_Click(object sender, EventArgs e)
        {
            descSizeHeight();
            dgvQuanLy.Enabled = true;
            btnSua.Enabled = true;
        }
        #endregion

        #region "Lấy dữ liệu từ DataGridView"
        private void dgvQuanLy_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            string memName = dgvQuanLy.CurrentRow.Cells[0].Value.ToString();
            string role = dgvQuanLy.CurrentRow.Cells[2].Value.ToString();
            txtTenThanhVien.Text = memName;
            cbxVaiTro.SelectedValue = role;
        }
        #endregion

        #region "Chức năng nút OK"
        private void btnOK_Click(object sender, EventArgs e)
        {
            MessageBoxEx.EnableGlass = false;
            string tenThanhVien = txtTenThanhVien.Text;
            string tenVaiTro = cbxVaiTro.SelectedValue.ToString();
            frmLyDo formLyDo = new frmLyDo();
            formLyDo.ShowDialog();
            string reason = formLyDo.LyDo;
            if(!reason.Equals(""))
            {
                int result = _mem.UpdateRole(tenThanhVien, tenVaiTro);
                MessageBoxEx.Show(result > 0 ? "Phân quyền thành công !!!" : "Phân quyền thất bại !!!");
                descSizeHeight();
                frmQuanLy_Load(sender, e);
                btnSua.Enabled = true;
                dgvQuanLy.Enabled = true;

                _log = new BOLog();
                _log.AddLog(Session.member.TenThanhVien, " sửa vai trò thành viên " + tenThanhVien + " thành " + tenVaiTro, DateTime.Now, reason);
            }
        }
        #endregion

        #region "Tìm kiếm ngay khi gõ vào ô tìm kiếm"
        private void txtSearch_TextChanged(object sender, EventArgs e)
        {
            string tenThanhVien = txtSearch.Text;
            if (tenThanhVien.Equals(""))
                frmQuanLy_Load(sender, e);
            else
            {
                _ds = _mem.Search(tenThanhVien);
                dgvQuanLy.DataSource = _ds.Tables[0];
            }
        }
        #endregion

        #region "Chức năng nút xóa"
        private void btnXoa_Click(object sender, EventArgs e)
        {
            MessageBoxEx.EnableGlass = false;
            var tenThanhVien = dgvQuanLy.CurrentRow.Cells[0].Value.ToString();
            if (!tenThanhVien.Equals("admin"))
            {  
                var dr = MessageBoxEx.Show("Bạn có thật sự muốn xóa?", "Delete", MessageBoxButtons.YesNo,
                                            MessageBoxIcon.Question);
                if (dr == DialogResult.Yes)
                {
                    frmLyDo formLyDo = new frmLyDo();
                    formLyDo.ShowDialog(this);
                    string reason = formLyDo.LyDo;
                    if (!reason.Equals(""))
                    {
                        _log = new BOLog();
                        _log.AddLog(Session.member.TenThanhVien, " xóa thành viên " + tenThanhVien, DateTime.Now,
                                    reason);
                        var result = _mem.Delete(tenThanhVien);
                        MessageBoxEx.Show(result > 0 ? "Xóa thành công !!!" : "Xóa thất bại !!!");
                    }
                }
            }
            frmQuanLy_Load(sender, e);
        }
        #endregion

        private void frmQuanLy_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult dr;
            MessageBoxEx.EnableGlass = false;
            dr = MessageBoxEx.Show("Bạn có thật sự muốn thoát ?", "Thông báo", MessageBoxButtons.YesNo,
                                   MessageBoxIcon.Question);
            if (dr == DialogResult.No)
            {
                e.Cancel = true;
            }
        }

        private void btnLog_Click(object sender, EventArgs e)
        {
            frmLog _log = new frmLog();
            _log.Show();
        }
    }
}